﻿using System;
using System.Collections.Generic;
using System.Text;

namespace ProtocolVN.Framework.Win
{
    /// <summary>
    /// DUYVT
    /// Ràng buộc Thêm/Xóa/Sửa phiếu trong kỳ tồn kho
    /// </summary>
    public class RangBuocUpdatePhieuIsKhoaSoTonKho : RangBuocRule
    {
        DateTime? ngay_tao_ban_dau;
        DateTime? ngay_tao_thay_doi;      
        
        public RangBuocUpdatePhieuIsKhoaSoTonKho() { }

        public RangBuocUpdatePhieuIsKhoaSoTonKho(DateTime? ngay_tao_ban_dau, DateTime? ngay_tao_thay_doi)
        {
            this.ngay_tao_ban_dau = ngay_tao_ban_dau;
            this.ngay_tao_thay_doi = ngay_tao_thay_doi;
        }        

        #region RangBuocRule Members

        public List<InvalidInfo> Check()
        {
            List<InvalidInfo> ret = new List<InvalidInfo>();
            bool flag = true;

            if (ngay_tao_ban_dau != null)
            {
                if (ngay_tao_ban_dau == ngay_tao_thay_doi)
                {
                    //Trường hợp xóa phiếu hay cập nhật phiếu không thay đổi ngày tạo
                    flag = KhoTonKhoHelp.CheckNgayTao_KhoTonKhoHopLe(ngay_tao_ban_dau);
                    if (flag == false)
                    {
                        ret.Add(new InvalidInfo(
                            "Phiếu thuộc về kỳ tồn kho đã khóa sổ hay không thuộc kỳ tồn kho nào",
                            "Cần mở sổ kỳ tồn kho(hay tạo mới nếu chưa tồn tại) nếu muốn cập nhật các phiếu phát sinh", 
                            InvalidInfo.InvalidType.ERROR));
                    }
                }
                else
                {
                    //Trường hợp thay đổi ngày tạo phiếu
                    int error = 0;
                    error = KhoTonKhoHelp.CheckNgayTao_KhoTonKhoHopLe(ngay_tao_ban_dau, ngay_tao_thay_doi);
                    if (error == -1)
                    {
                        ret.Add(new InvalidInfo(
                            "Phiếu thuộc về kỳ tồn kho đã khóa sổ hay không thuộc kỳ tồn kho nào",
                            "Cần mở sổ kỳ tồn kho(hay tạo mới nếu chưa tồn tại) nếu muốn cập nhật các phiếu phát sinh", 
                            InvalidInfo.InvalidType.ERROR));
                    }
                    else if (error == -2)
                    {
                        ret.Add(new InvalidInfo(
                            "Phiếu thuộc về kỳ tồn kho đã mở sổ nhưng ngày tạo sau khi sửa lại không thuộc về kỳ tồn kho đó",
                            "Cập nhật ngày tạo phải thuộc về cùng 1 kỳ tồn kho", 
                            InvalidInfo.InvalidType.ERROR));
                    }
                    else if (error == -3)
                    {
                        ret.Add(new InvalidInfo(
                            "Đã có lỗi trong quá trình kiểm tra tạo phiếu",
                            "Cần liên hệ với quản trị hệ thống để khắc phục", 
                            InvalidInfo.InvalidType.WARNING));
                    }
                }
            }              
            else
            {
                //Trường hợp tạo phiếu mới  
                flag = KhoTonKhoHelp.CheckNgayTao_KhoTonKhoHopLe(ngay_tao_thay_doi);
                if (flag == false)
                {
                    ret.Add(new InvalidInfo(
                            "Phiếu thuộc về kỳ tồn kho đã khóa sổ hay không thuộc kỳ tồn kho nào",
                            "Cần mở sổ kỳ tồn kho(hay tạo mới nếu chưa tồn tại) nếu muốn cập nhật các phiếu phát sinh",
                            InvalidInfo.InvalidType.ERROR));
                }
            }                     
            return ret;
        }

        #endregion
    }
}
